inspector: Change semantics of inspector render node notify
authorBenjamin Otte <otte@redhat.com>
Tue, 3 Apr 2018 19:09:35 +0000 (21:09 +0200)
committerBenjamin Otte <otte@redhat.com>
Thu, 5 Apr 2018 12:57:10 +0000 (14:57 +0200)
Instead of just notifying the inspector of what is going to be rendered,
allow the inspector to modify it.

This way, the inspector can overlay information it deems relevant over
the render node while still having access to what the actual widget
(without the inspector) would paint.

gtk/gtkwidget.c
gtk/inspector/window.c
gtk/inspector/window.h

index 4ea1838e3c51460537e46dd53e203dd45f0b31d2..d4c42d87ab199c9d56b9683f8af5386773de4817 100644 (file)
@@ -13509,11 +13509,11 @@ gtk_widget_render (GtkWidget            *widget,
 
   if (root != NULL)
     {
-      gtk_inspector_record_render (widget,
-                                   renderer,
-                                   surface,
-                                   region,
-                                   root);
+      root = gtk_inspector_prepare_render (widget,
+                                           renderer,
+                                           surface,
+                                           region,
+                                           root);
 
       gsk_renderer_render (renderer, root, region);
 
index 35bbf7f82879aceb4e8ad55fb4ecf355d7ad3bb0..428de723c6c07479a7f12fff38e13247728fa470 100644 (file)
@@ -369,22 +369,22 @@ gtk_inspector_window_get_for_display (GdkDisplay *display)
   return g_object_get_data (G_OBJECT (display), "-gtk-inspector");
 }
 
-void
-gtk_inspector_record_render (GtkWidget            *widget,
-                             GskRenderer          *renderer,
-                             GdkSurface           *surface,
-                             const cairo_region_t *region,
-                             GskRenderNode        *node)
+GskRenderNode *
+gtk_inspector_prepare_render (GtkWidget            *widget,
+                              GskRenderer          *renderer,
+                              GdkSurface           *surface,
+                              const cairo_region_t *region,
+                              GskRenderNode        *node)
 {
   GtkInspectorWindow *iw;
 
   iw = gtk_inspector_window_get_for_display (gtk_widget_get_display (widget));
   if (iw == NULL)
-    return;
+    return node;
 
   /* sanity check for single-display GDK backends */
   if (GTK_WIDGET (iw) == widget)
-    return;
+    return node;
 
   gtk_inspector_recorder_record_render (GTK_INSPECTOR_RECORDER (iw->widget_recorder),
                                         widget,
@@ -392,6 +392,8 @@ gtk_inspector_record_render (GtkWidget            *widget,
                                         surface,
                                         region,
                                         node);
+
+  return node;
 }
 
 gboolean
index 2966054e95a3549afe6ee1a71472be8ad987fe2f..a9597b22bc58b4d58c3b70d9d066cc7669dbde82 100644 (file)
@@ -102,16 +102,16 @@ void       gtk_inspector_stop_highlight     (GtkWidget          *widget);
 void       gtk_inspector_on_inspect         (GtkWidget          *widget,
                                              GtkInspectorWindow *iw);
 
-void       gtk_inspector_window_select_widget_under_pointer (GtkInspectorWindow *iw);
+void                    gtk_inspector_window_select_widget_under_pointer        (GtkInspectorWindow     *iw);
 
-void       gtk_inspector_window_rescan     (GtkWidget          *iw);
+void                    gtk_inspector_window_rescan                             (GtkWidget              *iw);
 
-gboolean   gtk_inspector_is_recording      (GtkWidget          *widget);
-void       gtk_inspector_record_render     (GtkWidget          *widget,
-                                            GskRenderer        *renderer,
-                                            GdkSurface         *surface,
-                                            const cairo_region_t *region,
-                                            GskRenderNode      *node);
+gboolean                gtk_inspector_is_recording                              (GtkWidget              *widget);
+GskRenderNode *         gtk_inspector_prepare_render                            (GtkWidget              *widget,
+                                                                                 GskRenderer            *renderer,
+                                                                                 GdkSurface             *surface,
+                                                                                 const cairo_region_t   *region,
+                                                                                 GskRenderNode          *node);
 
 G_END_DECLS